BEST MONITOR ――――――――――――――――――――――――――――――――――――――― I/O 1982年 6月号掲載 PC−8001(+PCG) マシン語 0A000H−0BFFFH S:0B000H 起動方法 MON L GB000 ――――――――――――――――――――――――――――――――――――――― このモニタは当クラブのマシン語講座用にPCとMZの両者に 共通コマンド、共通表示、動作するように、1年前に開発したものです。 今回はPC版を発表します。 ―――― 特 徴 ―――― (1)逆アセンブラ表示の滝のぼり。 (2)直接マシン語コードでも、ニモニックでも入力可。   さらに逆アセンブル表示する。 (3)リロケート・コマンドがある。 (4)MZ版と統一仕様にした。 (5)HELPコマンドがある(コマンド以外のキーでコマンドー覧を衣示する)。 使い方 GB000[RET] とすると“WIDTH”を聞いてくるので、 40字[1]か80字[2]をキーインすると、図1のように表示し、 コマンド待ちとなります。 図1 ・―――――――――――――――――――――――・ | ** BEST Monitor by H.SATOU ** | | | | W:カキコミ       U:ニーモニック カキコミ | | D:ディス アセンブラー M:メモリ ダンプ | | C:チェックサム B:ブレーク ポイント | | R:リロケート G:ジャンプ | | N:ワードサーチ E:ワードヘンカン | | O:ルーチンヲ サガス !:モニターニ トブ | | P:プリンター $:チェックサム モード | | %:BASICニ トブ Q:ワーク ヲ サガス | ・―――――――――――――――――――――――・ ―――― コマンドの説明 ―――― コマンドは図1の他に ・―――――――――――――――――――――――――――・ |L:ロード        V:ベリファイ       | |S:セーブ        J:MOTOR ON/OFF| |I:コールド・スタート  K:ウメツクス       | |X:テンソウ       Z:ダンプ・プリンタ    | |?:スクリーン・コピー  T:ヒラガナセッテイ    | ・―――――――――――――――――――――――――――・ があります。 ■W:カキコミ  このコマンドのときのみテン・キーが16進キーとして使えます(図2)。  [CLR]アドレス増加(16進入力中に誤って画面消去せずに済む)  [DEL]アドレス減少  [ ↑ ]直前のDATAをリピート      なお、PCG8100を使っている場合はキーイン時に      音が出ます。      0からFの順に音が高くなります。      1字入力後[DEL]を押しますと、      カーソルが1つ戻って入れ直せます。      それ以外のキーを押すと、エラーブザーがなります。 図2   ・―――――――・   |→|R|×|←|   |―+―+―+―|   |7|8|9|A|   |―+―+―+―|   |4|5|6|B|   |―+―+―+―|   |1|2|3|C|   |―+―+―+―|   |0|F|E|D|   ・―――――――・ ■U:ニーモニック カキコミ  [ドコカラ?]と表示するので、書き込み開始番地を入れます。  あとは16進数で書くなり、ニモニックで書くなりあなたの自由です。  一行書き込みごとに[RET]してください。  16進数で書いたときは逆アセンブルを、  ニモニックで書いたときはそのマシン語コードを即表示します。  特に、ニモニックでの書き込みの際、  相対ジャンブ・アドレスは直にそのアドレスを書き込んでかまいません  (勝手に計算してくれます)。  もちろん、ジャンプ・アドレスやコール・アドレスも  上位・下位を逆にすることは必要ありません。  ただし、ニモニック表示にあるスペースはそのとおりに  空けないとエラーになります。  なお、次のものは幹通のニモニックとは異なるので注意してください。      ADD A,B → ADD B      SUB A,C → SUB C      JP (HL) → JP HL ■D:ディスアセンブル  開始アドレスを入力すると1行表示してコマンド待ちになります。  [SPACE]を押し続けると連続表示し、離すとコマンド待ちとなります。  ここで、また[SPACE]を押すと次のアドレスから表示します(図3参照)。  さあ、ここで画期的機能をご紹介します。  逆アセンブルを画面に表示させたら、[↑]キーを押してみてください。  逆アセンブルの滝のぼり表示をします。  開始アドレスまで滝のぼり表示を致します。  もちろん、スクリーン・エディットも可能です。  [H]を押すとカーソルが画面中央に移動し、修正可能状態となります。  Uコマンドと同様に書き込んでください。  ニモニックで書き込んだ場合は[CTRL][E]を押し、  カーソル以下一行を消してから[RET]してください。  修正不要のところはそのまま[RET]を押してください。  [STOP]でコマンド待ちになります。 図3 ・――――――――――――――――――――・ | #D:ディス アセンブラー | | ドコカラ ? B000 | | | | B000 31FFFF LB SP,FFFFH 1 | | B003 2141A7 LD HL,A741H !ァ | | B006 CDED52 CALL 52EDH ヘR | | B009 CD750F CALL 0F75H ヘu | | B00C FE31 CP 31H 1 | | B00E 2808 JR Z,B018H ( | | B010 FE32 CP 32H 2 | | B012 20F5 JR NZ,B009H | | B014 0650 LD B,50H P | | B016 1802 JR B01AH | | B018 0628 LD B,28H ( | | B01A 0E14 LD C,14H | | B01C CD3A09 CALL 093A ヘ: | | B01F 2170A7 LD H,A770H !pァ | | B022 CD8408 CALL 8884H ヘB | | B025 2179A7 LD H,A779 !yァ | ・――――――――――――――――――――・ M:メモリーダンプ  開始アドレスを入力すると16バイト表示します(図4参照)。  このとき、次のキーで各々の動作をします。  [STOP]  コマンド待ち  [RET] 続行  [ H ] ASCII修正  [↑][↓][←][→]スクリーン・エディット  また、表示中に[ESC]を押すと一時停止をします。  このときも上述のキーが使えます。 図4 ・―――――――――――――――――――――・ | #M:メモリダンプ | | ドコカラ?9000 | | | | 9000 AB CD BC AB CA 2B AC CD ォヘシォハ+ャヘ | | 9008 79 AE 38 04 77 23 18 F7 yヨ8 w# | ・―――――――――――――――――――――・ ■C:チェックサム  開始アドレスを入力します。  画面が40字のときは16行を2列、  80字のときは4列表示後にそのときのモード($コマンド参照)を  表示します(図5参照)。  このとき次のキー機能があります。  [STOP]  コマンド待ち  [RET] 続行  [ H ] スクリーン・コピー 図5 B000 - B07F = 3AAA B800 - B87F = 41F1 C000 - C07F = 3B4A C800 - C87F = 1BAA B080 - B0FF = 388A B880 - B8FF = 4A4B C080 - C0FF = 3E5B C880 - C8FF = 1FA3 B100 - B17F = 3E3F B900 - B97F = 48E7 C100 - C17F = 07EC C900 - C97F = 1BB4 B180 - B1FF = 3EBC B980 - B9FF = 3AB9 C180 - C1FF = 0000 C980 - C9FF = 1F36 B200 - B27F = 42C6 BA00 - BA7F = 0000 C200 - C27F = 0000 CA00 - CA7F = 1B51 B280 - B2FF = 3CC0 BA80 - BAFF = 0000 C280 - C2FF = 0000 CA80 - CAFF = 1B00 B300 - B37F = 42ED BB00 - BB7F = 0000 C300 - C37F = 0000 CB00 - CB7F = 1C2E B380 - B3FF = 46D5 BB80 - BBFF = 0000 C380 - C3FF = 0000 CB80 - CBFF = 1F4F B400 - B47F = 3E54 BC00 - BC7F = 0000 C400 - C47F = 0000 CC00 - CC7F = 1A5D B480 - B4FF = 441A BC80 - BCFF = 0000 C480 - C4FF = 0000 CC80 - CCFF = 3CE8 B500 - B57F = 45EF BD00 - BD7F = 0A15 C500 - C57F = 0000 CD00 - CD7F = 0000 B580 - B5FF = 4115 BD80 - BDFF = 40E4 C580 - C5FF = 0000 CD80 - CDFF = 3F01 B600 - B67F = 3DBD BE00 - BE7F = 0000 C600 - C67F = 0000 CE00 - CE7F = 03FC B680 - B6FF = 4D2B BE80 - BEFF = 0000 C680 - C6FF = 2474 CE80 - CEFF = 2C28 B700 - B77F = 4211 BF00 - BF7F = 0000 C700 - C77F = 20CC CF0O - CF7F = 2141 B780 - B7FF = 44BF BF80 - BFFF = 29EB C780 - C7FF = 1E2D CF80 - CFFF = 1E8F I/O 80バイト ? ■$:チェックサム・モード  前述のCコマンド実行直前に、必要に応じてモードを設定してください。 ■B:ブレーク・ポイント  設定アドレスを入力してください。  新設定アドレスを入力すると旧設定アドレスは解除されます。  すべての解除は0を入力してください。  ブレーク・ポイントになると、レジスタを各々表示し、  コマンド待ちとなります(図6)。 図6 ・――――――――――――――・ | #B:ブレークポイント | | Adr=0000 | | Adr=? 9000 | | | | #G:ジャンプ | | ドコ ヘ ? 9000 | | | | A F B C D E H L | | 00 A3 14 28 00 9A 90 00 | | A' F' B' C' D' E' H' L' | | 08 00 00 00 00 00 00 10 | | PC SP IX IY I | | 9000 FFFF 8200 0001 80 | | S Z * H * P N C | | 1 0 1 0 0 0 1 1 | | # | ・――――――――――――――・ ■R:リロケート I/O誌に発表されたMZ版“S.R.D.”のリロケー卜と同機能です。  つまり、このBEST MONITOR自身もリロケート可能です。  それではその手順を述べましょう(C000へのリロケート)。 ・―――――――――――――――――――――――――――――・ | ドコカラ? A000(先頭アドレス) | | ドコマデ? BFFF(データ・エリアも含む最終アドレス) | | ドコヘ? C000(移動先アドレス) | | データエリアハドコカラ? | | A000(データ・エリアの先頭アドレス、なければ0)| | ドコマデ? A7FF(データ・エリアの最終アドレス、なければ0)| | OK? Y (良ければ[Y]、だめなら他のキー) | ・―――――――――――――――――――――――――――――・ 以上でコマンド待ちとなって一般的にはこれでリロケート完了です。 ただし、このBEST MONITORのように コマンド・テーブルを使っている際はまだ作業が残っています。 WコマンドでC96B A0→C0 、CD49 A4→C4 に変更し、 DF80以降のコマンド・テーブルを図7のとおり変更します(下線部)。 図7 ・――――――――――――――――――――――――――――・ | DF80 44 56 CF 55 80 CF 48 92 CE 20 75 CF 50 9C CF 25 | | ~~ ~~ ~~ ~~ | | DF90 82 3C 47 D2 CF 57 7D D0 0C 22 CF 4D 78 D1 24 13 | | ~~ ~~ ~~ ~~ | | DFA0 D2 43 51 D2 42 37 D3 4E 46 D4 45 50 D4 3F F0 CF | | ~~ ~~ ~~ ~~ ~~ ~~ | | DFB0 21 F6 CF 52 22 D5 4F 4D D7 51 59 D7 53 D4 D7 4C | | ~~ ~~ ~~ | | DFC0 48 D8 56 DC D8 5A FA D8 58 35 D9 4B 87 D9 49 00 | | ~~ ~~ ~~ ~~ ~~ | | DFD0 D0 4A AF D9 1E 70 DD 00 00 00 00 00 00 00 00 00 | | ~~ | ・――――――――――――――――――――――――――――・ ■N:ワード・サーチ  6バイトまでのデータを捜します(図8参照)。 図8 ・―――――――――・ | #N:ワードサーチ | | ナニ ヲ ? CD5702 | | ドコカラ ? B000 | | ドコマデ? B200 | | B059 CD 57 02 | | B09B CD 57 02 | | B09E CD 57 02 | | B0C5 CD 57 02 | | B0E5 CD 57 02 | | B0FD CD 57 02 | | B100 CD 57 02 | | B16C CD 57 02 | | B1A6 CD 57 02 | | B1E2 CD 57 02 | | B1E5 CD 57 02 | | | | # | ・―――――――――・ ■E:ワード・ヘンカン  ナニヲ?←変更されるDATA  ナニニ?←変更するDATA  ドコカラ?←開始アドレス  ドコマデ?←最終アドレス  なお、6バイトまでのDATAが変更でき、  変更したときはそのアドレスも表示します。 ■O:ルーチンヲ サガス  サブルーチンを捜して表示します(図9参照)。  [ESC]で一時停止、  [?]でスクリーン・コピー、  [RET]で続行、  [STOP]でコマンド待ちとなります。 図9 ・――――――――――――――――――――・ | #O:ルーチンヲ サガス | | サブルーチン ハ | | ドコカラ ? 0000 | | ドコマデ? 5FFF | | | | サガストコロハ | | ドコカラ ? A000 | | ドコマデ? AFFF | | A10E F42202 CALL P,0222H " | | A30E F20003 JP P,0300H | | A333 F2035A JP P,5AO3H Z | | A336 F20002 JP P,0200H | | A34B F20233 JP P,3302H 3 | | A353 F2015B JP P,5B01H [ | | A36B F20232 JP P,3202H 2 | ・――――――――――――――――――――・ ■Q:ワーク ヲ サガス  ワーク・エリアを使っているアドレスを捜して表示します(図10参照)。  キー機能は、前述のOコマンドと同じです。 図10 ・―――――――――――――――――――――・ | #Q:ワーク ヲ サカ'ス | | サガストコロハ | | ドコカラ ? B000 | | ドコマデ? B100 | | B000 31FFFF LD SP,FFFFH 1 | | B003 2141A7 LD HL,A741H !Aァ | | B01F 217047 LD HL,A770H !pァ | | B025 2179A7 LD HL,A779H !yァ | | B02B 216846 LD HL,A668H !hヲ | | B039 21B045 LD HL,A5B0H !-・ | | B046 3264E4 LD (E464H),A 2d | | B05C 31FFFF LD SP,FFFFH 1 | | B069 2180BF LD HL,BFB0H !ソ | | B07D 21B0A5 LD HL,A5B0H !-・ | | B084 3238FF LD (FF38H),A 28 | | | | # | ・―――――――――――――――――――――・ ■P:プリンタ  逆アセンブルをプリンタに出力します。  [STOP]でコマンド待ちとなります。 ■Z:ダンプ・プリンタ  メモリ・ダンプをプリンタに出力します。  [STOP]でコマンド待ちとなります。 ■X:テンソウ  転送コマンドです。  転送後の領域が重なってもかまいません。 ■K:ウメツクス  指定領域を指定DATAで埋めます. ■!:モニターニ トブ  PC−8001のモニタをコールします。  [CTRL][B]でBESTMONITORに戻ってきます。 ■%:BASIC ニ トブ  BASICのHOT STARTへ戻ります。 ■?:スクリーン・コピー  画面をプリンタに出力します。 ■G:ジャンプ  指定アドレスヘジャンプします。 ■I:コールド スタート  画面の40字、80字モード切り換えに使います。 ■S:セーブ  プログラムのセーブ・コマンドです。  スタート・アドレスを0にすると、ロード後オート・スタートしません。  ファイル名はな、なんと20字まで可能です。  ファイル名を入力すると、すぐカセットに出力するので  直前に [REC][PLAY]を押してください。 ■J:MOTOR ON/OFF  カセット・モーターのON−OFFを反転させます。 ■L:ロード  ロード・コマンドです。  [STOP]でコマンド待ち。 ■V:ベリファイ  エラーのときは“Tape read error”と表示します。  [STOP]でコマンド待ち。  なお、Wコマンド以外で [CLR]を押した場合は画面クリアします。 ■T:ひらがな  PCGがあればカタカナをひらがな表示します。 最後に このモニタをご使用されることによって、ニモニック表示の学習にもなります。 なぜなら、ニモニック表示通りに入力しないと、 コンピュータは受け付けてくれません。 後日、アセンブラでプログラムする際に大いに役立つことと思います。 このモニタはPCの空きROMエリアに入れることもできます。 ROMライタをお持ちの方はご利用ください。 【】参考資料  S.R.D.、MUAT、DMT−80